home *** CD-ROM | disk | FTP | other *** search
/ Amiga Format CD 42 / Amiga Format AFCD42 (Issue 126, Aug 1999).iso / -serious- / comms / other / slrn / slrn_src / src / vmsmail.c < prev    next >
C/C++ Source or Header  |  1999-05-14  |  3KB  |  127 lines

  1. /* Copyright (c) 1998 John E. Davis (davis@space.mit.edu)
  2.  *
  3.  * This file is part of slrn.
  4.  *
  5.  * Slrn is free software; you can redistribute it and/or modify it
  6.  * under the terms of the GNU General Public License as published by the
  7.  * Free Software Foundation; either version 2, or (at your option) any
  8.  * later version.
  9.  * 
  10.  * Slrn is distributed in the hope that it will be useful, but WITHOUT
  11.  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  12.  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
  13.  * for more details.
  14.  * 
  15.  * You should have received a copy of the GNU General Public License
  16.  * along with Slrn; see the file COPYING.  If not, write to the Free
  17.  * Software Foundation, 59 Temple Place - Suite 330, 
  18.  * Boston, MA  02111-1307, USA.
  19.  */
  20.  
  21. #include "config.h"
  22. #include "slrnfeat.h"
  23.  
  24. #include <stdio.h>
  25. #include <ssdef.h>
  26. #include <string.h>
  27.  
  28.  
  29. #include "vms.h"
  30. #include "vmsmail.h"
  31.  
  32. extern int mail$send_add_bodypart ();
  33. extern int mail$send_begin ();
  34. extern int mail$send_add_attribute ();
  35. extern int mail$send_add_address ();
  36. extern int mail$send_message ();
  37. extern int mail$send_end ();
  38.  
  39.  
  40. static void fill_struct(Mail_Type *m, int act, char *s)
  41. {
  42.    m->code = act;
  43.    m->buflen = strlen(s);
  44.    m->addr = (long) s;
  45.    m->junk = m->ret = 0;
  46. }
  47.  
  48.  
  49. /* to might be a comma separated list--- parse it too */
  50. int vms_send_mail(char *to, char *subj, char *file)
  51. {
  52.    Mail_Type mt0, mt;
  53.    int context = 0;
  54.    char *p;
  55.    
  56.    mt0.code = mt0.buflen = mt0.addr = mt0.ret = mt0.junk = 0;
  57.    
  58.    if (SS$_NORMAL != mail$send_begin(&context, &mt0, &mt0))
  59.      {
  60.     return(0);
  61.      }
  62. #if 0
  63.    fill_struct(&mt, MAIL$_SEND_TO_LINE, to);
  64.    if (SS$_NORMAL != mail$send_add_attribute(&context, &mt, &mt0))
  65.      {
  66.     return(0);
  67.      }
  68.    
  69.    fill_struct(&mt, MAIL$_SEND_USERNAME, to);
  70.    if (SS$_NORMAL != mail$send_add_address(&context, &mt, &mt0))
  71.      {
  72.     return(0);
  73.      }
  74. #endif
  75.    while (1)
  76.      {
  77.     while (*to && ((*to <= ' ') || (*to == ','))) to++;
  78.     if (*to == 0) break;
  79.     p = to;
  80.     while ((*p > ' ') && (*p != ',')) p++;
  81.     
  82.         mt.code = MAIL$_SEND_TO_LINE;
  83.     mt.buflen = p - to;
  84.     mt.ret = mt.junk = 0;
  85.     mt.addr = (long) to;
  86.     
  87.     if (SS$_NORMAL != mail$send_add_attribute(&context, &mt, &mt0))
  88.       {
  89.          return(0);
  90.       }
  91.     
  92.     mt.code = MAIL$_SEND_USERNAME;
  93.     mt.buflen = p - to;
  94.     mt.ret = mt.junk = 0;
  95.     mt.addr = (long) to;
  96.     
  97.     if (SS$_NORMAL != mail$send_add_address(&context, &mt, &mt0))
  98.       {
  99.          return(0);
  100.       }
  101.     to = p;
  102.      }
  103.    
  104.    fill_struct(&mt, MAIL$_SEND_SUBJECT, subj);
  105.    if (SS$_NORMAL != mail$send_add_attribute(&context, &mt, &mt0))
  106.      {
  107.     return(0);
  108.      }
  109.    
  110.    fill_struct(&mt, MAIL$_SEND_FILENAME, file);
  111.    if (SS$_NORMAL != mail$send_add_bodypart(&context, &mt, &mt0))
  112.      {
  113.     return(0);
  114.      }
  115.    
  116.    if (SS$_NORMAL != mail$send_message(&context, &mt0, &mt0))
  117.      {
  118.     return(0);
  119.      }
  120.    
  121.    if (SS$_NORMAL != mail$send_end(&context, &mt0, &mt0))
  122.      {
  123.     return(0);
  124.      }
  125.    return(1);
  126. }
  127.